#ifndef _tenacitas_errors_core_errors_h_

/** @file */


/** @todo */

// ==> C++ Headers

// ==> 3rds Headers

// ==> Our Headers

// ==> Namespaces
using namespace std;

// ==> Macro Constants

// ==> Macro Commands


/** ==> namespace of the organization */
namespace <ORGANIZATION> {
    /** ==> namespace for the project */
    namespace <PROJECT> {
        /** ==> application, bussiness, display, interaction, process, storage,
            transmittion */
        namespace <GROUP> {

            // ==> Typedefs 

            // ==> Pre-Declarations

            // ==> Attributes 

            // ==> Functions

            // ==> Classes

            /** 
                @nosubgrouping 
            */
            class <CLASS> {

                // ==> <CLASS> - Friends

                /** Class allowed to access private members of @p <CLASS>, in
                    order to perform tests */
                friend class <CLASS>_tester;

            public:

                // ==> <CLASS> - Public Internal Types

                // ==> <CLASS> - Public Constructors

                /** */
                inline <CLASS>() noexcept;

                /** */
                inline <CLASS>(const <CLASS> &) = delete;

                /** */
                inline <CLASS>(<CLASS> &&) = delete;

                /** Destructor */
                inline ~<CLASS>( );

                // ==> <CLASS> - Public Accessors

                // ==> <CLASS> - Public Helpers

                // ==> <CLASS> - Public Processors

                // ==> <CLASS> - Public Operators

                /** */
                inline <CLASS> & operator=(const <CLASS> &) noexcept;

                /** */
                inline <CLASS> & operator=(<CLASS> &&) noexcept;

                /** not allowed */
                inline bool operator ==(const <CLASS> & ) noexcept;

                /** not allowed */
                inline bool operator !=(const <CLASS> & ) noexcept;

                /** not allowed */
                inline bool operator >=(const <CLASS> & ) noexcept;

                /** not allowed */
                inline bool operator >(const <CLASS> & ) noexcept;

                /** not allowed */
                inline bool operator <=(const <CLASS> & ) noexcept;

                /** not allowed */
                inline bool operator <(const <CLASS> & ) noexcept;

                /** not allowed */
                void* operator new (std::size_t size)
                    throw (std::bad_alloc) = delete; 

                /** not allowed */
                void operator delete (void *p_class_id) = delete;

                /** not allowed */
                void *operator new[] (size_t) = delete;

                /** not allowed */
                void operator delete[] (void *) = delete;

                // ==> <CLASS> - Public Attributes

            private:

                // ==> <CLASS> - Private Internal Types

                // ==> <CLASS> - Private Constructors

                // ==> <CLASS> - Private Accessors

                // ==> <CLASS> - Private Helpers

                // ==> <CLASS> - Private Processors

                // ==> <CLASS> - Private Operators

                // ==> <CLASS> - Private Attributes


            };
        }
    }
}
// =============================================================================
// I M P L E M E N T A T I O N
// =============================================================================

using namespace <ORGANIZATION>::<PROJECT>::<GROUP>;


#endif
